Dùng typedef để định nghĩa kiểu Kiểu và khai báo biến trong C

Một cách khác để đặt tên riêng cho kiểu dữ liệu là dùng câu lệnh với từ khóa typedef:

typedef float real;

Nếu so sánh cách viết trong thí dụ trên với việc dùng từ khoá #define để định nghĩa thì chúng hoàn toàn tương đương (chỉ khác nhau về thứ tự các chữ floatreal). Tuy nhiên, cách viết này là một sự thay thế thế tên "đúng nghĩa" chứ không phải là một macro đơn thuần. Trở lại thí dụ:

  typedef char* string;

Câu lệnh trên cho phép đặt tên string như là một kiểu mới (mà nội dung của nó là kiểu con trỏ char). Bây giờ hãy xét đến câu lệnh khai báo biến:

  string name, job;

Trường hợp này sẽ được trình dịch diễn dịch đúng theo mong muốn thành:

  char *name, *job;

Dùng cho struct

Một thí dụ khác liên quan đến việc đặt tên cho struct là việc kết hợp cả hai khai báo và đặt tên lại trong cùng một câu lệnh:

1   typedef struct2   { 3     char * name;4     int * age;5   } person;

Như vậy khi khai báo biến chỉ cần viết là:

  person Trung;

Ứng dụng

Một ứng dụng đáng lưu ý của typedef là việc làm cho mã C trở nên linh hoạt hơn trong nhiều môi trường khác nhau. Thí dụ: khi muốn xác định dùng đúng 4 byte cho một kiểu nguyên nhưng trên một số hệ máy thì nó ứng với kiểu int, trong khi trên một số hệ máy khác nó lại ứng với kiểu long int. Để giải quyết việc dùng chính xác 4 byte cho kiểu nguyên mà người lập trình muốn, thì có thể dùng giải pháp là: thêm vào một tập tin bao gồm trong đó có chứa định nghĩa:

  typedef int FOURBYTE; //dùng cho các máy lấy int là 4 byte

hay định nghĩa:

  typedef long int FOURBYTE; //dùng cho các máy lấy long int là 4 byte

và chỉ cần thêm vào trong mã nguồn câu lệnh #include <Tên_tập_tin_bao_gồm> như vậy chỉ cần thay nội dung của tập tin bao gồm thì toàn bộ mã vẫn hoạt động đúng.